{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "893e5381-8bad-4288-88e4-a30a0f0859c9",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.stats as st"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd4c096e",
   "metadata": {},
   "source": [
    "1. Анализ данных, их редукция и feature engeneering\n",
    "\n",
    "Необходимо проанализировать имеющиеся данные (в файлах csv содаржаться id исследуемых объектов), охарактеризовать их (какие свойства объектов сможете найти), привести сэмплы, которые вы мануально можете отности к разным кластерам и к одному кластеру. Провести редукцию объектов двумя способами из перечисленных: уменьшение размерности, сокращение множества возможных значений, группировку, сжатие, коррекцию данных, формирование новых признаков. Провести стандартизацию признаков при необходимости.  Провести анализ с помощью PCA (или аналогичные, например, UMAP, t-SNE, PHATE) без непосредственной кластеризации и попытаться оценить верное число кластеров; привести наиболее важные компоненты, дающие больший вклад в разделение объектов. Провести интерпретацию результатов."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc7646ac",
   "metadata": {},
   "source": [
    "2. Кластеризация данных\n",
    "\n",
    "Произвести кластеризацию данных как минимум тремя способами: один из них k-means, один должен производить кластеризацию без информации о количестве искомых кластеров. Визуализировать результаты кластеризации, предоставить метрики оценки качества кластеризации и время работы кластеризации.\n",
    "\n",
    "Отчёт может быть выполнен в Jupyter, но сохранён в html (результат выполнения кода должен присутствовать) или аналогичное.\n",
    "\n",
    "Кроме отчёта должен быть приложен csv файл, содержащий две колонки: первая содержит имя файла (соответствющее названию файла, например \"id100000.jpg\"), вторая - присвоенный этому файлу номер кластера (номера считаются от 0), по этому файлу будет считаться верность кластеризации."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "812c4be8-2cb8-4019-88d3-6e04f243f19d",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv(\"cs1.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "99b2fddc-1d91-4510-aece-bcf928f0b352",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>age</th>\n",
       "      <th>gender</th>\n",
       "      <th>region</th>\n",
       "      <th>income</th>\n",
       "      <th>married</th>\n",
       "      <th>children</th>\n",
       "      <th>car</th>\n",
       "      <th>save_act</th>\n",
       "      <th>current_act</th>\n",
       "      <th>mortgage</th>\n",
       "      <th>pl</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ID12101</td>\n",
       "      <td>48</td>\n",
       "      <td>FEMALE</td>\n",
       "      <td>INNER_CITY</td>\n",
       "      <td>17546.0</td>\n",
       "      <td>NO</td>\n",
       "      <td>1</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "      <td>YES</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ID12102</td>\n",
       "      <td>40</td>\n",
       "      <td>MALE</td>\n",
       "      <td>TOWN</td>\n",
       "      <td>30085.1</td>\n",
       "      <td>YES</td>\n",
       "      <td>3</td>\n",
       "      <td>YES</td>\n",
       "      <td>NO</td>\n",
       "      <td>YES</td>\n",
       "      <td>YES</td>\n",
       "      <td>NO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ID12103</td>\n",
       "      <td>51</td>\n",
       "      <td>FEMALE</td>\n",
       "      <td>INNER_CITY</td>\n",
       "      <td>16575.4</td>\n",
       "      <td>YES</td>\n",
       "      <td>0</td>\n",
       "      <td>YES</td>\n",
       "      <td>YES</td>\n",
       "      <td>YES</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ID12104</td>\n",
       "      <td>23</td>\n",
       "      <td>FEMALE</td>\n",
       "      <td>TOWN</td>\n",
       "      <td>20375.4</td>\n",
       "      <td>YES</td>\n",
       "      <td>3</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "      <td>YES</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ID12105</td>\n",
       "      <td>57</td>\n",
       "      <td>FEMALE</td>\n",
       "      <td>RURAL</td>\n",
       "      <td>50576.3</td>\n",
       "      <td>YES</td>\n",
       "      <td>0</td>\n",
       "      <td>NO</td>\n",
       "      <td>YES</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "      <td>NO</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        id  age  gender      region   income married  children  car save_act  \\\n",
       "0  ID12101   48  FEMALE  INNER_CITY  17546.0      NO         1   NO       NO   \n",
       "1  ID12102   40    MALE        TOWN  30085.1     YES         3  YES       NO   \n",
       "2  ID12103   51  FEMALE  INNER_CITY  16575.4     YES         0  YES      YES   \n",
       "3  ID12104   23  FEMALE        TOWN  20375.4     YES         3   NO       NO   \n",
       "4  ID12105   57  FEMALE       RURAL  50576.3     YES         0   NO      YES   \n",
       "\n",
       "  current_act mortgage   pl  \n",
       "0          NO       NO  YES  \n",
       "1         YES      YES   NO  \n",
       "2         YES       NO   NO  \n",
       "3         YES       NO   NO  \n",
       "4          NO       NO   NO  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "646c80a9-caa6-4c05-87f3-5c9347700aa0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 330 entries, 0 to 329\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   id           330 non-null    object \n",
      " 1   age          330 non-null    int64  \n",
      " 2   gender       330 non-null    object \n",
      " 3   region       330 non-null    object \n",
      " 4   income       330 non-null    float64\n",
      " 5   married      330 non-null    object \n",
      " 6   children     330 non-null    int64  \n",
      " 7   car          330 non-null    object \n",
      " 8   save_act     330 non-null    object \n",
      " 9   current_act  330 non-null    object \n",
      " 10  mortgage     330 non-null    object \n",
      " 11  pl           330 non-null    object \n",
      "dtypes: float64(1), int64(2), object(9)\n",
      "memory usage: 31.1+ KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4990ac41-fc16-4253-a9dc-964daf1b3e0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>income</th>\n",
       "      <th>children</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>330.000000</td>\n",
       "      <td>330.000000</td>\n",
       "      <td>330.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>42.042424</td>\n",
       "      <td>27253.220758</td>\n",
       "      <td>1.051515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>14.548463</td>\n",
       "      <td>13065.326534</td>\n",
       "      <td>1.066375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>18.000000</td>\n",
       "      <td>5014.210000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>29.250000</td>\n",
       "      <td>17149.675000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>41.000000</td>\n",
       "      <td>24718.250000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>54.000000</td>\n",
       "      <td>35523.750000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>67.000000</td>\n",
       "      <td>63130.100000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              age        income    children\n",
       "count  330.000000    330.000000  330.000000\n",
       "mean    42.042424  27253.220758    1.051515\n",
       "std     14.548463  13065.326534    1.066375\n",
       "min     18.000000   5014.210000    0.000000\n",
       "25%     29.250000  17149.675000    0.000000\n",
       "50%     41.000000  24718.250000    1.000000\n",
       "75%     54.000000  35523.750000    2.000000\n",
       "max     67.000000  63130.100000    3.000000"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "a2164b9c-1046-4763-9f75-25f6ceba151c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Users\\dmitr\\anaconda3\\envs\\notebook\\Lib\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
      "  with pd.option_context('mode.use_inf_as_na', True):\n"
     ]
    },
    {
     "data": {
      "image/png": "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lJWVqV+/fvrLX/5yytvZs2eP7rjjDpWXlysiIkIDBgzQ6tWr9ctf/lLSD+90CggI0NixY30eiAcAACC1MMjEx8friy++0AcffKCtW7dKknr37u1zq/SpWLhw4Qn7Q0NDlZWVpaysrJaUCQAAznGndY3MmjVr1KdPH3k8HrlcLv3yl7/UlClTNGXKFA0dOlR9+/bVRx991Fa1AgAA+DitIPPCCy9o0qRJCg8Pb9QXERGhe++9V88991yrFQcAAHAipxVkNm3apGuuuabZ/quvvloFBQVnXBQAAMCpOK0gU1lZ2eRt18cFBgbqu+++O+OiAAAATsVpXex7/vnnq6ioyPsAu5/68ssvFRsb2yqFAYBTeB8UYI/TCjLXXnutHn/8cV1zzTUKDQ316autrdWsWbN0/fXXt2qBAHC28D4owD6nFWQee+wxvfHGG7rooos0efJk9er1w2PGt27dqqysLB07dky///3v26RQAGhrvA8KsM9pBRm3261PP/1U999/vzIyMmSMkSS5XC6lpaUpKytLbre7TQoFgLOF90EB9jjtB+J169ZN77zzjr7//ntt375dxhj17NlTnTp1aov6AAAAmtWiJ/tKUqdOnTR06NDWrAUAAOC0tOjt1wAAAP6AIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLYIMAACwFkEGAABYiyADAACsRZABAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQAAYC2CDAAAsBZBBgAAWIsgAwAArEWQAQAA1iLIAAAAaxFkAACAtQgyAADAWgQZAABgLUeDTGZmpoYOHaqOHTuqa9euGjNmjEpKSnzGHD58WOnp6ercubM6dOigsWPHqrKy0qGKAQCAP3E0yOTm5io9PV3r16/X+++/r/r6el199dU6ePCgd8z06dO1cuVKLVu2TLm5udq9e7duuukmB6sGAAD+ItDJna9atcpnffHixeratasKCgr0i1/8QjU1NVq4cKGWLFmikSNHSpIWLVqk3r17a/369Ro2bFijbdbV1amurs677vF42vZLAAAAx/jVNTI1NTWS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gw+adevWmR07dphPPvnEpKammujoaLNnzx5jDHPWlM8++8wEBgaap59+2mzbts389a9/Ne3btzd/+ctfvGP4PfBFkPETa9euNZIaLRMnTjTG/HDL3eOPP27cbrcJCQkxo0aNMiUlJT7b2Lt3rxk3bpzp0KGDCQ8PN3feeafZv3+/z5hNmzaZyy+/3ISEhJjzzz/fzJ07t1Etr7/+urnoootMcHCw6du3r/n73//eZt/7TDQ1X5LMokWLvGNqa2vNb3/7W9OpUyfTvn1786//+q+mvLzcZzs7d+40o0ePNmFhYSY6Oto8+OCDpr6+3mfM2rVrzSWXXGKCg4NNjx49fPZx3B//+EeTkJBggoODzaWXXmrWr1/fFl/7jNx1112mW7duJjg42HTp0sWMGjXKG2KMYb5Ox0+DDHPX2K233mpiY2NNcHCwOf/8882tt97q8zwU5qxpK1euNP369TMhISEmKSnJLFiwwKef3wNfLmOMceZYEAAAwJnhGhkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLUIMgAAwFoEGQBtasSIEZo2bZrTZQA4R/FkXwBtat++fQoKClLHjh2dLgXAOYggAwAArMWpJQBt6senlrp37645c+borrvuUseOHZWQkKAFCxb4jP/nP/+pcePGKSoqSuedd56GDBmi/Px8b392drb+5V/+RcHBwerVq5f+/Oc/+3ze5XJp/vz5uv7669W+fXv17t1beXl52r59u0aMGKHzzjtPl112mb755hufz7311lsaNGiQQkND1aNHD82ePVtHjx5tm0kB0GoIMgDOqmeffVZDhgzRxo0b9dvf/lb333+/SkpKJEkHDhzQlVdeqV27dmnFihXatGmTHn74YTU0NEiSli9frqlTp+rBBx9UUVGR7r33Xt15551au3atzz7+8z//U3fccYcKCwuVlJSk22+/Xffee68yMjK0YcMGGWM0efJk7/iPPvpId9xxh6ZOnaotW7Zo/vz5Wrx4sZ5++umzNzEAWsbBN28D+Bm48sorzdSpU40xxnTr1s1MmDDB29fQ0GC6du1qsrOzjTHGzJ8/33Ts2NHs3bu3yW1ddtllZtKkST5tN998s7n22mu965LMY4895l3Py8szkszChQu9ba+99poJDQ31ro8aNcrMmTPHZ7t//vOfTWxs7Gl+WwBnG0dkAJxVAwYM8P7Z5XIpJiZGe/bskSQVFhZq4MCBioqKavKzxcXFGj58uE/b8OHDVVxc3Ow+3G63JKl///4+bYcPH5bH45Ekbdq0SU8++aQ6dOjgXSZNmqTy8nIdOnToDL4tgLYW6HQBAH5egoKCfNZdLpf31FFYWFir78PlcjXbdny/Bw4c0OzZs3XTTTc12lZoaGir1ASgbXBEBoDfGDBggAoLC7Vv374m+3v37q1PPvnEp+2TTz5Rnz59zmi/gwYNUklJiS688MJGS0AA/0wC/owjMgD8xrhx4zRnzhyNGTNGmZmZio2N1caNGxUXF6eUlBQ99NBDuuWWWzRw4EClpqZq5cqVeuONN/TBBx+c0X5nzpyp66+/XgkJCfq3f/s3BQQEaNOmTSoqKtJTTz3VSt8OQFvgfzUA+I3g4GC999576tq1q6699lr1799fc+fOVbt27SRJY8aM0Ysvvqg//OEP6tu3r+bPn69FixZpxIgRZ7TftLQ0vf3223rvvfc0dOhQDRs2TM8//7y6devWCt8KQFvigXgAAMBaHJEBAADWIsgAAABrEWQAAIC1CDIAAMBaBBkAAGAtggwAALAWQQYAAFiLIAMAAKxFkAEAANYiyAAAAGsRZAAAgLX+H/VK1URCMkOMAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "ShapiroResult(statistic=0.942861020565033, pvalue=5.541695990984863e-10)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sns.histplot(df['income'])\n",
    "plt.show()\n",
    "st.shapiro(df[\"income\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "06198602-e412-4f0a-a77a-1cc15c506b4e",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Users\\dmitr\\anaconda3\\envs\\notebook\\Lib\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
      "  with pd.option_context('mode.use_inf_as_na', True):\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "ShapiroResult(statistic=0.9955028295516968, pvalue=0.46069273352622986)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tmp = np.random.normal(size=330)\n",
    "sns.histplot(tmp)\n",
    "plt.show()\n",
    "st.shapiro(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "2bac8a50-c4dc-448e-a37b-be3c3aa8eebf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "gender\n",
       "FEMALE    27435.078875\n",
       "MALE      27082.060176\n",
       "Name: income, dtype: float64"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('gender')['income'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "1ec8b69b-4772-497f-aa58-0269a02399be",
   "metadata": {},
   "outputs": [],
   "source": [
    "male = df[df['gender'] == 'MALE']['income']\n",
    "female = df[df['gender'] == 'FEMALE']['income']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "f160b6a0-7842-4ae4-99f7-48fc9e605170",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MannwhitneyuResult(statistic=13394.0, pvalue=0.8124637900905667)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "st.mannwhitneyu(male, female)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "0d15c633-123f-413f-9897-0248d8bde5d7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LeveneResult(statistic=0.004552939368501236, pvalue=0.9462442998451057)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "st.levene(male, female)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "c0a73d71-5a39-4253-a86d-9bc037d6bde0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "TtestResult(statistic=-0.2449534813001663, pvalue=0.8066456277315542, df=328.0)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "st.ttest_ind(male, female)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e4b9a80a-2c31-43e1-82b0-f1a164cc74cb",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
